package com.lee.system;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import com.alibaba.dubbo.config.annotation.Service;
import com.lee.constant.UserConstants;
import com.lee.system.api.IDeptService;
import com.lee.system.entity.Dept;
import com.lee.system.mapper.DeptMapper;
import com.lee.utils.StringUtils;



/**
 * 部门管理 服务实现
 * 
 * @author LiPengFei
 *
 */
@Service
public class DeptServiceImpl implements IDeptService {
	@Autowired
	private DeptMapper deptMapper;

	/**
	 * 查询部门管理集合
	 * 
	 * @return 所有部门信息
	 */
	@Override
	public List<Dept> selectDeptAll() {
		return deptMapper.selectDeptAll();
	}

	/**
	 * 查询部门管理树
	 * 
	 * @return 所有部门信息
	 */
	@Override
	public List<Map<String, Object>> selectDeptTree() {
		List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
		List<Dept> deptList = deptMapper.selectDeptAll();

		for (Dept dept : deptList) {
			if (UserConstants.DEPT_NORMAL.equals(dept.getStatus())) {
				Map<String, Object> deptMap = new HashMap<String, Object>();
				deptMap.put("id", dept.getDeptId());
				deptMap.put("pId", dept.getParentId());
				deptMap.put("name", dept.getDeptName());
				deptMap.put("title", dept.getDeptName());
				trees.add(deptMap);
			}
		}
		return trees;
	}

	/**
	 * 查询部门人数
	 * 
	 * @param parentId
	 *            部门ID
	 * @return 结果
	 */
	@Override
	public int selectDeptCount(Long parentId) {
		Dept dept = new Dept();
		dept.setParentId(parentId);
		return deptMapper.selectDeptCount(dept);
	}

	/**
	 * 查询部门是否存在用户
	 * 
	 * @param deptId
	 *            部门ID
	 * @return 结果 true 存在 false 不存在
	 */
	@Override
	public boolean checkDeptExistUser(Long deptId) {
		int result = deptMapper.checkDeptExistUser(deptId);
		return result > 0 ? true : false;
	}

	/**
	 * 删除部门管理信息
	 * 
	 * @param deptId
	 *            部门ID
	 * @return 结果
	 */
	@Override
	public int deleteDeptById(Long deptId) {
		return deptMapper.deleteDeptById(deptId);
	}

	/**
	 * 保存部门信息
	 * 
	 * @param dept
	 *            部门信息
	 * @return 结果
	 */
	@Override
	public int saveDept(Dept dept) {
		if (StringUtils.isNotNull(dept.getDeptId())) {
			return deptMapper.updateDept(dept);
		} else {
			return deptMapper.insertDept(dept);
		}
	}

	/**
	 * 根据部门ID查询信息
	 * 
	 * @param deptId
	 *            部门ID
	 * @return 部门信息
	 */
	@Override
	public Dept selectDeptById(Long deptId) {
		return deptMapper.selectDeptById(deptId);
	}

	/**
	 * 校验部门名称是否唯一
	 * 
	 * @param dept
	 *            部门信息
	 * @return 结果
	 */
	@Override
	public boolean checkDeptNameUnique(Dept dept) {
		if (dept.getDeptId() == null) {
			dept.setDeptId(-1L);
		}
		Dept info = deptMapper.checkDeptNameUnique(dept.getDeptName());
		if (StringUtils.isNotNull(info) && StringUtils.isNotNull(info.getDeptId())
				&& info.getDeptId().longValue() != dept.getDeptId().longValue()) {
			return false;
		}
		return true;
	}
}
